﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace MyVideoTek
{
    class GenreMv : SqliteData
    {
        //Attributs
        private int idGenre;
        private string nomGenre;


        //Constructeur
        public GenreMv(string unGenre) 
        {
            nomGenre = unGenre.ToLower();

            //Le genre est déjà présent en BDD
            if (VerifDoublon(nomGenre))
            {
                //Recup l'ID
                GetGenreByName();
            }
            else
            {
                //Ajoute le nouveau genre
                InsertGenre(nomGenre);
            }
        }


        //Ajouter un Genre en BDD
        public void InsertGenre(string unGenre)
        {
            idGenre = maxId();

            //Si le genre n'existe pas
            if (!VerifDoublon(unGenre))
            {
                //Requete insertion Film
                string maRequete = "INSERT INTO genre(id_genre, nom_genre) VALUES(@idGenre, @unGenre)";

                SQLiteConnection maConnexionSQLsrv = new SQLiteConnection(NameBdd);

                //Création de la commande SQL 
                SQLiteCommand myCommand = new SQLiteCommand(maRequete, maConnexionSQLsrv);

                //Création et décalartion des paramètres 
                myCommand.Parameters.Add(new SQLiteParameter("@idGenre"));
                myCommand.Parameters.Add(new SQLiteParameter("@unGenre"));

                //Attribution des valeurs aux paramètres 
                myCommand.Parameters["@idGenre"].Value = Convert.ToInt32(idGenre);
                myCommand.Parameters["@unGenre"].Value = unGenre;


                //Tente d'inserer un film
                try
                {
                    //Execution de la requête 
                    myCommand.Connection.Open();
                    myCommand.ExecuteNonQuery();
                    myCommand.Connection.Dispose();
                }
                catch (SqlException ex)
                {
                    //Message d'erreur
                    MessageBox.Show(ex.Message);
                }
            }
        }

        //Verification des doublons
        public bool VerifDoublon(string unGenre)
        {
            bool result = false;

            string maRequete = "SELECT * FROM genre WHERE nom_genre = @unGenre";

            SQLiteConnection maConnexionSQLsrv = new SQLiteConnection(NameBdd);

            //Création de la commande SQL 
            SQLiteCommand myCommand = new SQLiteCommand(maRequete, maConnexionSQLsrv);

            myCommand.Parameters.Add(new SQLiteParameter("@unGenre"));

            //Attribution des valeurs aux paramètres 
            myCommand.Parameters["@unGenre"].Value = unGenre;

            SQLiteDataReader resultReader = null;

            //Tente d'inserer un film
            try
            {
                //Execution de la requête 
                myCommand.Connection.Open();
                resultReader = myCommand.ExecuteReader();

            }
            catch (SqlException ex)
            {
                //Message d'erreur
                MessageBox.Show(ex.Message);
            }

            //True s'il y a des enregistrement
            result = resultReader.HasRows;


            //Ferme la connexion
            myCommand.Connection.Dispose();

            //return
            return result;
        }

        //Obtient l'id max
        private int maxId()
        {
            //Connection à la base de donnée
            SqliteData db = new SqliteData();

            DataTable resultTable = db.Select("SELECT max(id_genre)+1 FROM genre");

            //Recupère la ligne de resultat
            DataRow row = resultTable.Rows[0];

            //S'il y a rien, c'est qu'il y a aucun enregistrement docn on commence l'incrémente à 1
            if (row[0].ToString() == "")
            {
                return 1;
              
            }
            else
            {
                return Convert.ToInt32(row[0].ToString());
            }
        }

        //Recupère un ID de genre via son nom
        public void GetGenreByName()
        {            
            string maRequete = "SELECT id_genre FROM genre WHERE nom_genre = @nomGenre";

            SQLiteConnection maConnexionSQLsrv = new SQLiteConnection(NameBdd);

            //Création de la commande SQL 
            SQLiteCommand myCommand = new SQLiteCommand(maRequete, maConnexionSQLsrv);

            myCommand.Parameters.Add(new SQLiteParameter("@nomGenre"));

            //Attribution des valeurs aux paramètres 
            myCommand.Parameters["@nomGenre"].Value = nomGenre;

            SQLiteDataReader resultReader = null;

            //Tente d'inserer un film
            try
            {
                //Execution de la requête 
                myCommand.Connection.Open();
                resultReader = myCommand.ExecuteReader();

            }
            catch (SqlException ex)
            {
                //Message d'erreur
                MessageBox.Show(ex.Message);
            }

            //Assignation
            while (resultReader.Read())
            {
                idGenre = Convert.ToInt32(resultReader["id_genre"].ToString());
            }

            myCommand.Connection.Dispose();
        }

        #region Accesseur

        public int IdGenre
        {
            get { return idGenre; }
        }

        public string NomGenre
        {
            get { return nomGenre; }
        }

        #endregion
    }
}
